<?php
/**
 * @author Marat Komarov <bassguitarrer@gmail.com>
 */

class Cruiser_NSTree_Node extends Zend_Db_Table_Row
{
    const STRUCT = 'struct';

    protected $_struct;

    public function __construct($config)
    {
        if (isset($config[self::STRUCT]))
        {
            $this->_struct = $config[self::STRUCT];
        }
        parent::__construct($config);
    }

    public function getPrimary()
    {
        return $this->_struct['primary'];
    }

    public function getDataPrimary()
    {
        $info = $this->_table->info();
        return $info['primary'];
    }

    public function getStructure()
    {
        return $this->_struct;
    }

    public function getLevel()
    {
        return $this->_struct['level'];
    }

    function isRoot()
    {
        return (0 == $this->getLevel());
    }

    function isLeaf()
    {
        return !$this->hasChildren();
    }

    function hasChildren()
    {
        return $this->_struct['right'] - $this->_struct['left'] > 1;
    }

    // interface like Zend_Db_Table_Row

    public function save()
    {
        if (!isset($this->_struct)) {
            throw new Cruiser_NSTree_Node_Exception('Операция save() для узлов присутствующих в дереве. '
            . 'Предварительно вставьте узел appendChild() или insertSibling()');
        }

        parent::save();
    }
}
